還記得系列文的一開始,有先向各位讀者介紹在 NiFi 中重要的幾個 Componenet,那時候還只有概念文字的說明,現在我們已經建立起服務在自己本機上了,而在接下來的幾天我會再針對每一個 Component 作進一步地操作,同時也會帶一些操作來讓讀者對於這些名詞可以更印象深刻。
在一開始我們就有稍微點到 FlowFiles 的意思,這裡在貼上來讓大家回溫一下:
我們可以想像是資料中或是File中的一筆Record,甚至是一包資料同時含有很多筆 record,
今天假設有一張 Table且其中有100筆資料時,
當 NiFi 從中讀取時,這100筆 Record 就會在 NiFi 產生100筆 FlowFiles,
而 FlowFiles 會帶有自己的 attribute 和 content。
在套用一個比較熟悉的舉例,可以把『FlowFiles』類似於『網路封包』。網路封包一定會有既定的 metadata, 像是發送時間、header等資訊,這些對應到的就是 FlowFiles 的 Attributes; 而網路封包也會帶著真實的資料內容,可能加密也有可能不加密,而這對應到的就是 FlowFiles 的 content。
上面是一個很概要的說明,其實 FlowFiles 還有幾個重要的特性:
這裡給大家呈現一個應用,就會更加理解。我們先從 Kaggle - Titanic - Machine Learning from Disaster 下載一份資料集,其中有一個 train.csv
,共有 891 筆資料,像透過 NiFi 將資料讀出來,會產生什麼樣的狀況呢?先看一下下面的 git 檔:
先建立一個簡單的小 Pipeline,共有 4 個 Processor:
下一篇會有更詳細地介紹這些 Processor 說明,這邊就不特別提太多。
這裡在呈現剛剛 gif 檔的靜態圖:
可以看到在 FetchFile
的時候他是 output 一個 FlowFile,因為他是讀取檔案,這時候他會把檔案全部的資料塞成同一個 FlowFile; 但下一步的時候,SplitRecord
就會把裡面的資料一筆一筆切出來各個 FlowFiles,所以就會看到有 891 筆 FlowFiles。
這邊就能印證出 FlowFile 他可以是一包資料(File) 或是每一筆File 中的 records。而下游任務就可以藉此接受到每一筆資料做處理。
前面我們已經知道 FlowFiles 是如何產生出來,以及在 NiFi 的呈現狀況如何。但我一直都有提到的還有一件事情,就是 『Attributes』和 『Content』,這部分要如何在 NiFi 看到呢?一樣先來看 gif 檔:
可以從上面的操作可以看到如何呈現『Attributes』和 『Content』,如果太快我這邊我在細講一下。
當我們點擊 List Queue
或 View data provenance
的時候可以看到每一個 FlowFile,而當我們點選最左邊的 i
,就可以看到每一筆 FlowFile 的詳細資訊:
點選進來後,就可以看到 FlowFile 的 Details,其中在右下角可以看到有 Download
和 View
的按鈕,可以看到或下載目前這個 FlowFile 的真實資料內容
假如我們點選 View
,就可以看到如下的資料內容,最右手邊也會呈現內容是什麼格式,像是csv, json 等
然而,我們回到第2步驟,若點選ATTRIBUTES
,就可以看到所有關於這個 FlowFile 的 metadata,而這些 key 就會跟著 FlowFile 流到下游的 Processor,所以在下一個 Processor 也會看到同樣的 Attributes,而我們也可以針對這些 key 來做一些操作,在未來的場景應用時就會帶大家做一次。
有了這些操作的簡單小範例,我相信讀者們對於 NiFi FlowFile 的概念有更近一步地認識了,那未來我們在其他操作和應用時提到 FlowFile 的時候,你也可以立即反應它的概念與原因。最後,今天大家已經看到 Processor 出現了,所以想當然而明天就是要來介紹『Processor』啦,敬請期待一下。